package com.ruoyi.web.controller.bantong;

import com.ruoyi.bantong.service.IBtUserService;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.model.ClientLoginBody;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.user.CaptchaException;
import com.ruoyi.common.exception.user.CaptchaExpireException;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.framework.manager.AsyncManager;
import com.ruoyi.framework.manager.factory.AsyncFactory;
import com.ruoyi.framework.web.service.ClientLoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 登录验证
 * 
 * @author ruoyi
 */
@RestController
public class ClientLoginController
{
    @Autowired
    private ClientLoginService loginService;

    @Autowired
    private RedisCache redisCache;

    @Autowired
    private IBtUserService btUserService;

    /**
     * 手机号验证码登录方法
     * 
     * @param loginBody 登录信息
     * @return 结果
     */
    @PostMapping("/mobileLogin")
    public AjaxResult login(ClientLoginBody loginBody)
    {
        AjaxResult ajax = AjaxResult.success();
        // 生成令牌
        String token = loginService.login(loginBody.getMobile(),  loginBody.getCode(),loginBody.getUuid());
        ajax.put("data", token);
        return ajax;
    }

    /**
     * 手机号 密码登录方法
     *
     * @param loginBody 登录信息
     * @return 结果
     */
    @PostMapping("/mobilePwdLogin")
    public AjaxResult mobilePwdLogin(ClientLoginBody loginBody)
    {
        AjaxResult ajax = AjaxResult.success();
        // 生成令牌
        String token = loginService.mobilePwdLogin(loginBody.getMobile(),loginBody.getPassword());
        ajax.put("data", token);
        return ajax;
    }

    /**
     * 注册方法
     *
//     * @param loginBody 登录信息
     * @return 结果
     */
//    @PostMapping("/mobileRegister")
//    public AjaxResult register(ClientLoginBody loginBody)
//    {
//        if(StringUtils.isEmpty(loginBody.getUuid())){
//            return AjaxResult.error("注册用户'" + loginBody.getMobile() + "'失败，参数缺失！");
//        }
//        //判断是否重复注册
//        FootballUser user = footballClientUserService.selectUserByMobile(loginBody.getMobile());
//        if(!StringUtils.isNull(user)) {//查询不到用户直接注册
//            return AjaxResult.error("注册用户'" + loginBody.getMobile() + "'失败，手机号已存在");
//        }
//        //验证码验证
//        String verifyKey = Constants.CAPTCHA_CODE_KEY + loginBody.getUuid();
//        String captcha = redisCache.getCacheObject(verifyKey);
//        if(!loginBody.getCode().equalsIgnoreCase("666666")){
//            if (captcha == null)
//            {
//                AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginBody.getMobile(), Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
//                throw new CaptchaExpireException();
//            }
//            if (!loginBody.getCode().equalsIgnoreCase(captcha))
//            {
//                AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginBody.getMobile(), Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
//                throw new CaptchaException();
//            }
//        }
//
//        final String userId = "FU" + IdUtils.simpleUUID().substring(0,10);
//        FootballUser footballUser = new FootballUser();
//        footballUser.setUserId(userId);
//        footballUser.setNickName(loginBody.getNickname());
//        footballUser.setTelephone(loginBody.getMobile());
//        footballUser.setPassword(SecurityUtils.encryptPassword(loginBody.getPassword()));
//        footballUser.setBalance(0);
//        footballUser.setDisabled("1");
//        footballUser.setIsExpert("0");
//        footballUser.setPercent(0);
//        footballUser.setCreatePerson(userId);
//        footballUser.setUpdatePerson(userId);
//        int row = footballClientUserService.insertFootballUser(footballUser);
//        if(row > 0){
//            redisCache.deleteObject(verifyKey);
//        }
//        return toAjax(row);
//    }


//    /**
//     * 修改密码
//     *
//     * @param loginBody 登录信息
//     * @return 结果
//     */
//    @PutMapping("/updPwd")
//    public AjaxResult updPwd(ClientLoginBody loginBody)
//    {
//        if(StringUtils.isEmpty(loginBody.getUuid())){
//            return AjaxResult.error("注册用户'" + loginBody.getMobile() + "'失败，参数缺失！");
//        }
//        //判断是否重复注册
//        FootballUser user = footballClientUserService.selectUserByMobile(loginBody.getMobile());
//        if(StringUtils.isNull(user)) {//查询不到用户直接注册
//            return AjaxResult.error("用户'" + loginBody.getMobile() + "'修改失败，手机号不存在");
//        }
//        //验证码验证
//        String verifyKey = Constants.CAPTCHA_CODE_KEY + loginBody.getUuid();
//        String captcha = redisCache.getCacheObject(verifyKey);
//        redisCache.deleteObject(verifyKey);
//        if(!loginBody.getCode().equalsIgnoreCase("666666")){
//            if (captcha == null)
//            {
//                AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginBody.getMobile(), Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
//                throw new CaptchaExpireException();
//            }
//            if (!loginBody.getCode().equalsIgnoreCase(captcha))
//            {
//                AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginBody.getMobile(), Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
//                throw new CaptchaException();
//            }
//        }
//        FootballUser footballUser = new FootballUser();
//        footballUser.setTelephone(loginBody.getMobile());
//        footballUser.setPassword(SecurityUtils.encryptPassword(loginBody.getPassword()));
//        int row = footballClientUserService.updateFootballUser(footballUser);
//        if(row > 0){
//            redisCache.deleteObject(verifyKey);
//        }
//        return toAjax(row);
//    }

    @GetMapping("getUser")
    public AjaxResult getInfo(){
        Integer btUserId = SecurityUtils.getBtUserId();
        return AjaxResult.success(btUserService.selectBtUserById(btUserId));
    }

    /**
     * 响应返回结果
     *
     * @param rows 影响行数
     * @return 操作结果
     */
    protected AjaxResult toAjax(int rows)
    {
        return rows > 0 ? AjaxResult.success() : AjaxResult.error();
    }
}
